// 云函数入口文件
const cloud = require('wx-server-sdk')

cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) // 使用当前云环境
const db = cloud.database()
const _ = db.command
const $ = db.command.aggregate

// 云函数入口函数
exports.main = async (event, context) => {
  try {
    console.log('云函数接收参数:', event);
    
    const {
      categoryId,          // 分类ID
      page = 1,            // 页码，默认第1页
      pageSize = 10,       // 每页数量，默认10条
      sortType = 'default',// 排序类型：默认、销量、价格
      sortOrder = 'desc',  // 排序顺序：升序(asc)、降序(desc)
      onlyDiscount = false // 是否只显示优惠商品
    } = event

    // 先列出products集合中的一条记录，检查字段名
    console.log('获取一条产品记录进行字段检查');
    const sampleProduct = await db.collection('products').limit(1).get();
    console.log('产品样本:', sampleProduct.data);

    // 构建查询条件 - 仅使用分类ID，不加其他条件，提高匹配率
    const condition = {
      categoryId: categoryId
    };

    // 如果只显示优惠商品，添加相应条件
    if (onlyDiscount) {
      condition.specialPrice = _.exists(true);
    }

    console.log('查询条件:', condition);

    // 跳过的数量
    const skip = (page - 1) * pageSize;

    // 尝试不同查询方式
    console.log('尝试方式1: 直接使用categoryId查询');
    const directQuery = await db.collection('products')
      .where({
        categoryId: categoryId
      })
      .count();
    console.log('直接查询结果数量:', directQuery.total);
    
    console.log('尝试方式2: 使用or条件查询');
    const orQuery = await db.collection('products')
      .where(_.or([
        { categoryId: categoryId },
        { category: categoryId }
      ]))
      .count();
    console.log('or条件查询结果数量:', orQuery.total);

    // 如果OR查询返回了结果，使用OR条件，否则使用原来的条件
    const finalCondition = orQuery.total > 0 
      ? _.or([{ categoryId: categoryId }, { category: categoryId }])
      : condition;

    // 构建排序条件
    let orderField = 'updatedAt'; // 默认按更新时间排序
    let orderDirection = sortOrder === 'asc' ? 'asc' : 'desc';

    if (sortType === 'sales') {
      orderField = 'soldCount';
    } else if (sortType === 'price') {
      orderField = 'price';
    }

    // 查询商品列表
    const productsQuery = db.collection('products')
      .where(finalCondition)
      .skip(skip)
      .limit(pageSize);
    
    // 如果有排序字段，添加排序
    if (orderField) {
      productsQuery.orderBy(orderField, orderDirection);
    }
    
    // 执行查询
    const productsResult = await productsQuery.get();
    console.log('查询结果数量:', productsResult.data.length);
    
    if (productsResult.data.length > 0) {
      console.log('第一个商品:', productsResult.data[0]);
    } else {
      // 如果没有结果，尝试不使用任何条件查询
      console.log('没有找到商品，尝试获取最新商品');
      const anyProducts = await db.collection('products').limit(pageSize).get();
      console.log('无条件查询商品数量:', anyProducts.data.length);
      if (anyProducts.data.length > 0) {
        console.log('无条件查询第一个商品:', anyProducts.data[0]);
      }
    }

    // 统计总数
    const countResult = await db.collection('products')
      .where(finalCondition)
      .count();

    console.log('商品总数:', countResult.total);

    return {
      success: true,
      data: productsResult.data,
      total: countResult.total,
      pageInfo: {
        page,
        pageSize,
        totalPage: Math.ceil(countResult.total / pageSize)
      }
    };
  } catch (error) {
    console.error('云函数执行错误:', error);
    return {
      success: false,
      message: error.message
    };
  }
}; 